#ifndef __THREADPOOL_H__
#define __THREADPOOL_H__

#include "TaskQueue.h"
#include <vector>
#include <memory>
#include <functional>


using std::vector;
using std::unique_ptr;
using std::function;

using Task = function<void()>;

class Thread;

class Threadpool
{
    //设计友元的目的是，是WorkThread需要访问
    //线程池中的私有成员函数threadFunc
    friend class WorkThread;
public:
    Threadpool(size_t threadNum, size_t queSize);
    ~Threadpool();

    //线程池的启动与停止
    void start();
    void stop();

    //添加任务
    void addTask(Task &&task);

private:
    //获取任务
    Task getTask();
    //线程池交给子线程做的任务
    void threadFunc();

private:
    size_t _threadNum;//子线程的数目
    size_t _queSize;//任务队列的大小
    vector<unique_ptr<Thread>> _threads;//存放子线程容器
    TaskQueue _taskQue;//存放任务的队列
    bool _isExit;//线程池是否退出的标志

};

#endif
